#include "MainWindow.h"
#include <cstdlib>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , videoLabel(new QLabel(this))
    , isPlaying(false)
    // , rtspDecoder(new Rtsp_Decod())
    // , decodeThread(new QThread())
{
    ui->setupUi(this);

    // 设置QLabel的位置和大小
    videoLabel->setGeometry(0, 0, 1280, 720); // 根据视频分辨率调整大小

    // 将Rtsp_Decod对象移动到子线程中
    // rtspDecoder->moveToThread(decodeThread);

    // // 连接子线程的启动信号和Rtsp_Decod的start信号
    // connect(decodeThread, &QThread::started, rtspDecoder, &Rtsp_Decod::start);
    // // 连接子线程的结束信号和Rtsp_Decod的stop信号
    // connect(decodeThread, &QThread::finished, rtspDecoder, &Rtsp_Decod::stop);
    // // 连接信号和槽
    // connect(rtspDecoder, &Rtsp_Decod::newFrame, this, &MainWindow::updateFrame);
    // 连接信号与槽
    connect(decoderThread, &RtspDecoderThread::newFrame, this, &MainWindow::updateFrame);

    //连接按键与槽,按键的响应
    connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::switch_rtsp_status_clicked);
    connect(ui->pushButton_2,&QPushButton::clicked,this,&MainWindow::poweroff_fun_clicked);

    // 尝试打开RTSP流
    // rtspDecoder->open("rtsp://192.168.42.1/h264");
    // rtspDecoder->open("rtsp://110.222.222.150:554");
    // bool ret = rtspDecoder->open("rtsp://admin:Fx123456@10.222.222.150:554/cam/realmonitor?channel=1&subtype=0");

    // 启动子线程
    // decodeThread->start();
}

MainWindow::~MainWindow()
{
    // 析构函数实现
    // // 停止解码器
    // rtspDecoder->stop();
    // // 等待线程结束
    // decodeThread->wait();

    // // 删除解码器对象
    // delete rtspDecoder;
    // // 删除线程对象
    // delete decodeThread;

    // 停止解码线程
    decoderThread->closeStream();

    // 等待线程结束
    decoderThread->wait();

    // 删除解码线程
    delete decoderThread;

    delete videoLabel;
    // 删除UI
    delete ui;

}

void MainWindow::updateFrame(const QImage &frame)
{
    // 在QLabel上显示新的视频帧
    videoLabel->setPixmap(QPixmap::fromImage(frame));
}

void MainWindow::switch_rtsp_status_clicked(){
    // if (rtspDecoder->isSuspendDecod() == false)
    // {
    //     //正在运行
    //     rtspDecoder->set_SuspendDecod(true);
    //     ui->pushButton->setText(QCoreApplication::translate("MainWindow", "开始", nullptr));
    // }else 
    // {
    //     //停止
    //     rtspDecoder->set_SuspendDecod(false);
    //     ui->pushButton->setText(QCoreApplication::translate("MainWindow", "停止", nullptr));
    // }

    if (isPlaying) {
        // 如果正在播放，则暂停
        decoderThread->closeStream();
        ui->pushButton->setText("开始播放");
        isPlaying = false;
    } else {
        // 如果已暂停，则播放
        decoderThread->setUrl("rtsp://admin:Fx123456@10.222.222.150:554/cam/realmonitor?channel=1&subtype=0");
        if (decoderThread->openStream()) {
            ui->pushButton->setText("停止播放");
            isPlaying = true;
        } else {
            // 处理打开失败的情况
            QMessageBox::critical(this, "Error", "Failed to open RTSP stream.");
        }
    }
}

// void MainWindow::onPlayButtonClicked()
// {
//     // 设置RTSP URL
//     decoderThread->setUrl("rtsp://example.com/stream");

//     // 打开RTSP流并开始解码
//     if (!decoderThread->openStream()) {
//         // 处理打开失败的情况
//         QMessageBox::critical(this, "Error", "Failed to open RTSP stream.");
//     }
// }

// void MainWindow::onStopButtonClicked()
// {
//     // 停止解码线程
//     decoderThread->closeStream();
// }

void MainWindow::poweroff_fun_clicked(){
    //功能菜单

    QMessageBox msgBox;
    // Shutdown_Menu msgBox(this);
    msgBox.resize(640, 480);
    msgBox.setText("请选择具体操作:");
    msgBox.setIcon(QMessageBox::Question);
    msgBox.setWindowFlags(Qt::FramelessWindowHint | Qt::Tool); // 设置无边框和工具类型

    // 添加自定义按钮
    QPushButton *shutdownButton = msgBox.addButton("关机", QMessageBox::ActionRole);
    shutdownButton->setFixedSize(100,100);
    QPushButton *restartButton = msgBox.addButton("重启", QMessageBox::ActionRole);
    restartButton->setFixedSize(100,100);
    QPushButton *settingsButton = msgBox.addButton("设置", QMessageBox::ActionRole);
    settingsButton->setFixedSize(100,100);
    QPushButton *cancelButton = msgBox.addButton("取消", QMessageBox::ActionRole);
    cancelButton->setFixedSize(100,100);
    // settingsButton->setEnabled(false);//按键设置为不可用状态

    // 连接按钮的信号到相应的槽函数
    QObject::connect(shutdownButton, &QPushButton::clicked,this, &MainWindow::shutdown_action);
    QObject::connect(restartButton, &QPushButton::clicked,this, &MainWindow::restart_action);
    QObject::connect(settingsButton, &QPushButton::clicked,this, &MainWindow::settings_action);

    // 显示消息框
    msgBox.exec();
}

void MainWindow::shutdown_action() {
    // 弹出询问是否确认关机的提示框
    QMessageBox::StandardButton reply;
    reply = QMessageBox::question(nullptr, "确定关机", "您确定要关机吗？",
                                  QMessageBox::Yes | QMessageBox::No);
    // 根据用户的选择执行操作
    if (reply == QMessageBox::Yes) {
        // 用户选择了“是”，执行关机命令
        system("poweroff");
    } else {
        // 用户选择了“否”，不做任何操作，返回原界面
    }
}

void MainWindow::restart_action() {
    // 这里添加重启的逻辑
    system("reboot");
}

void MainWindow::settings_action() {
    System_Set *sys_set = new System_Set();
    sys_set->show();
}


































